<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class M_Reporte extends Modelo {

    function __construct() {
        parent::__construct();
        $this->tabla = '';
    }

    function setAttributes($datos = array(), $tipo = 'object') {
        return parent::_setAttributes(__CLASS__, $datos, $tipo);
    }

    function doArray() {
        return parent::_doArray(__CLASS__);
    }

    /**
     * Metodo para levantar un item de la base de datos por id
     * @param integer $id el id del objeto a levantar
     * @return boolean falso si hubo error, true si tuvo exito
     */
    public function getListPorCausaId($causaId) {
        $select =
                '
                pericias.id,
                pericias.fecha,
                pericias.titulo,
                pericias.descripcion,
                pericias.valoracion,
                medicos.matricula,
                medicos.nombre
                ';
        $this->db->select($select);
        $this->db->from('pericias');
        $this->db->join('demandados', 'demandados.id = pericias.demandadoId');
        $this->db->join('medicos', 'medicos.matricula = demandados.matricula');

        $this->db->where('demandados.causaId', $causaId);


        $results = $this->db->get();

        return $results->result_object();
    }

    function buscarXDemandado($matricula) {
        $this->tabla = 'causas';
        $this->db->select('causas.id causaId, demandados.id, demandados.defendido, demandados.subsidiado, medicos.matricula, medicos.nombre, medicos.numeroDoc, fueros.nombre fueroNombre, caratulas.nombre caratulaNombre, causas.fechaInicio, causas.fechaPrecentacion, causas.lugarActo, causas.valoracion');
        $this->db->from($this->tabla);
        $this->db->join('demandados', 'demandados.causaId = ' . $this->tabla . '.id');
        $this->db->join('medicos', 'medicos.matricula = demandados.matricula');
        $this->db->join('caratulas', 'caratulas.causaId = ' . $this->tabla . '.id');
        $this->db->join('fueros', 'fueros.id = ' . $this->tabla . '.fueroId');
        $this->db->where('caratulas.id in (
                                            SELECT max(ssap_caratulas.id) 
                                            FROM ssap_caratulas 
                                            JOIN ssap_causas c
                                            ON c.id = ssap_caratulas.causaId 
                                            WHERE ssap_causas.id = c.id
                                            )');


        //$this->db->where_not_in('(SELECT estadoId FROM ssap_causas_x_estados WHERE causaId =  ssap_' . $this->tabla . '.id ORDER BY id DESC LIMIT 0,1)', array(5, 6, 7, 8));
        $this->db->where($this->tabla . '.finalizada is not NULL');

        if ($matricula != '') {
            $this->db->where('demandados.matricula', $matricula);
        }

        $this->db->group_by('demandados.id');

        $results = $this->db->get();

        return $results->result_object();
    }

    /**
     * Devuelve las causas finalizadas por dpto judicial
     */
    function getCausasFinalizadas($deptoJudicialId, $fechaDesde, $fechaHasta, $fuero) {
        $this->tabla = 'causas';
        $this->db->select('causas.id causaId, caratulas.nombre, fueros.nombre fueroNombre, caratulas.nombre caratulaNombre, causas.fechaInicio, causas.fechaPrecentacion, causas.lugarActo');
        $this->db->from($this->tabla);

        $this->db->join('caratulas', 'caratulas.causaId = ' . $this->tabla . '.id');
        $this->db->join('fueros', 'fueros.Id = ' . $this->tabla . '.fueroId');
        $this->db->join('depto_judicial', 'depto_judicial.Id = ' . $this->tabla . '.deptoJudicialId');
        $this->db->where($this->tabla . '.finalizada is not NULL');
        $this->db->where($this->tabla . '.finalizada >= "' . ($fechaDesde) . '"');
        $this->db->where($this->tabla . '.finalizada <= "' . ($fechaHasta) . '"');
        $this->db->where($this->tabla . '.fueroId', $fuero);
        $this->db->where('caratulas.id in (
                                            SELECT max(ssap_caratulas.id) 
                                            FROM ssap_caratulas 
                                            JOIN ssap_causas c
                                            ON c.id = ssap_caratulas.causaId 
                                            WHERE ssap_causas.id = c.id
                                            )');

        $results = $this->db->get();
//echo $this->db->last_query();
        return $results->result_object();
    }

    function getCantDemandadosPorEspe($fechaDesde, $fechaHasta) {
        $query = $this->db->query("
            SELECT id, descripcion nombre
            FROM ssap_especialidades
            ORDER BY nombre
                ");

        $resultado = array();
        foreach ($query->result() as $row) {
            $resultado[$row->id]->nombreEspe = $row->nombre;
            $resultado[$row->id]->cantDemandados = 0;
            $resultado[$row->id]->cantFProfSubs = 0;
            $resultado[$row->id]->cantFProfNoSubs = 0;
            $resultado[$row->id]->importeSub = 0;
        }
        // Cantidad de Prof Subsidiados de causas finalizadas por Especialidad
        $query = $this->db->query("
            SELECT count(d.id) cantFProfSubs, e.id especialidadId, sum(p.importe) importeSub
            FROM ssap_causas  c
            JOIN ssap_demandados d ON d.causaId = c.id
            JOIN ssap_especialidades e ON d.especialidadId = e.id    
            JOIN ssap_subsidios s ON d.id = s.demandadoId
            JOIN ssap_pagos p ON p.id = s.pagoId
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta' AND d.subsidiado = 1
            GROUP BY e.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->especialidadId]->cantFProfSubs = $row->cantFProfSubs;
            $resultado[$row->especialidadId]->importeSub = $row->importeSub;
            //$resultado[1000]->cantFProfSubs += $row->cantFProfSubs;
        }

        // Cantidad de Prof NO Subsidiados de causas finalizadas por especialidad
        $query = $this->db->query("
            SELECT count(d.id) cantFProfNoSubs, e.id especialidadId
            FROM ssap_causas  c
            JOIN ssap_demandados d ON d.causaId = c.id
            JOIN ssap_especialidades e ON d.especialidadId = e.id
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta' AND d.subsidiado = 0
            GROUP BY e.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->especialidadId]->cantFProfNoSubs = $row->cantFProfNoSubs;
            //$resultado[1000]->cantFProfNoSubs += $row->cantFProfNoSubs;
        }
        // Cantidad de Demandados de causas finalizadas por especialidad
        $query = $this->db->query("
            SELECT count(d.id) cantDemandados, e.id especialidadId
            FROM ssap_causas  c
            JOIN ssap_demandados d ON d.causaId = c.id
            JOIN ssap_especialidades e ON d.especialidadId = e.id
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta'
            GROUP BY e.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->especialidadId]->cantDemandados = $row->cantDemandados;
        }

        return $resultado;
    }

    function getPagosPorConceptos($fechaDesde, $fechaHasta) {
        $this->db->select('sum(ssap_pagos.importe) importe, conceptos.nombre conceptoNombre');
        $this->db->from('pagos');
        $this->db->join('conceptos', 'conceptos.id = pagos.conceptoId');


        $this->db->where('pagos.fecha >= ', $fechaDesde);
        $this->db->where('pagos.fecha <= ', $fechaHasta);
        $this->db->group_by('conceptos.id');

        $results = $this->db->get();
//echo $this->db->last_query();
        return $results->result_object();
    }

    function getCausasPorFuero($fechaDesde, $fechaHasta, $fuero) {
        $query = $this->db->query("
            SELECT id, nombre
            FROM ssap_depto_judicial
            ORDER BY nombre
                ");

        $resultado = array();
        foreach ($query->result() as $row) {
            $resultado[$row->id]->deptoJudicial = $row->nombre;
            $resultado[$row->id]->cantActivas = 0;
            $resultado[$row->id]->cantAProfSubs = 0;
            $resultado[$row->id]->cantAProfNoSubs = 0;
            $resultado[$row->id]->cantFinalizadas = 0;
            $resultado[$row->id]->cantFProfSubs = 0;
            $resultado[$row->id]->cantFProfNoSubs = 0;
            $resultado[$row->id]->cantTotales = 0;
        }

        $resultado[1000]->deptoJudicial = Totales;
        $resultado[1000]->cantActivas = 0;
        $resultado[1000]->cantAProfSubs = 0;
        $resultado[1000]->cantAProfNoSubs = 0;
        $resultado[1000]->cantFinalizadas = 0;
        $resultado[1000]->cantFProfSubs = 0;
        $resultado[1000]->cantFProfNoSubs = 0;
        $resultado[1000]->cantTotales = 0;

        // Cantidad de causas activas por fuero para todos los dptos judiciales
        $query = $this->db->query("
            SELECT count(c.id) cantActivas, f.nombre fuero, dj.id deptoJudicial
            FROM ssap_causas c
            JOIN ssap_fueros f ON f.id = c.fueroId
            JOIN ssap_depto_judicial dj ON dj.id = c.deptoJudicialId
            WHERE c.finalizada is NULL AND c.fueroId = $fuero
            GROUP BY dj.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->deptoJudicial]->cantActivas = $row->cantActivas;
            $resultado[$row->deptoJudicial]->cantTotales += $row->cantActivas;
            $resultado[1000]->cantActivas += $row->cantActivas;
            $resultado[1000]->cantTotales += $row->cantActivas;
        }

        // Cantidad de Prof Subsidiados de causas activas por fuero para todos los dptos judiciales
        $query = $this->db->query("
            SELECT count(d.id) cantAProfSubs, f.nombre fuero, dj.id deptoJudicial
            FROM ssap_causas c 
            JOIN ssap_demandados d ON d.causaId = c.id
            JOIN ssap_fueros f ON f.id = c.fueroId
            JOIN ssap_depto_judicial dj ON dj.id = c.deptoJudicialId
            WHERE c.finalizada is NULL AND d.subsidiado = 1 AND c.fueroId = $fuero
            GROUP BY dj.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->deptoJudicial]->cantAProfSubs = $row->cantAProfSubs;
            $resultado[1000]->cantAProfSubs += $row->cantAProfSubs;
        }

        // Cantidad de Prof  NO Subsidiados de causas activas por fuero para todos los dptos judiciales
        $query = $this->db->query("
            SELECT count(d.id) cantAProfNoSubs, f.nombre fuero, dj.id deptoJudicial
            FROM ssap_causas c 
            JOIN ssap_demandados d ON d.causaId = c.id
            JOIN ssap_fueros f ON f.id = c.fueroId
            JOIN ssap_depto_judicial dj ON dj.id = c.deptoJudicialId
            WHERE c.finalizada is NULL AND d.subsidiado = 0 AND c.fueroId = $fuero
            GROUP BY dj.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->deptoJudicial]->cantAProfNoSubs = $row->cantAProfNoSubs;
            $resultado[1000]->cantAProfNoSubs += $row->cantAProfNoSubs;
        }

        // Cantidad de causas finalizadas por fuero para todos los dptos judiciales
        $query = $this->db->query("
            SELECT count(c.id) cantFinalizadas, f.nombre fuero, dj.id deptoJudicial
            FROM ssap_causas  c
            JOIN ssap_fueros f ON f.id = c.fueroId
            JOIN ssap_depto_judicial dj ON dj.id = c.deptoJudicialId
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta' AND c.fueroId = $fuero
            GROUP BY dj.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->deptoJudicial]->cantFinalizadas = $row->cantFinalizadas;
            $resultado[$row->deptoJudicial]->cantTotales += $row->cantFinalizadas;
            $resultado[1000]->cantFinalizadas += $row->cantFinalizadas;
            $resultado[1000]->cantTotales += $row->cantFinalizadas;
        }

        // Cantidad de Prof Subsidiados de causas finalizadas por fuero para todos los dptos judiciales
        $query = $this->db->query("
            SELECT count(d.id) cantFProfSubs, f.nombre fuero, dj.id deptoJudicial
            FROM ssap_causas  c
            JOIN ssap_demandados d ON d.causaId = c.id
            JOIN ssap_fueros f ON f.id = c.fueroId
            JOIN ssap_depto_judicial dj ON dj.id = c.deptoJudicialId
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta' AND d.subsidiado = 1 AND c.fueroId = $fuero
            GROUP BY dj.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->deptoJudicial]->cantFProfSubs = $row->cantFProfSubs;
            $resultado[1000]->cantFProfSubs += $row->cantFProfSubs;
        }

        // Cantidad de Prof NO Subsidiados de causas finalizadas por fuero para todos los dptos judiciales
        $query = $this->db->query("
            SELECT count(d.id) cantFProfNoSubs, f.nombre fuero, dj.id deptoJudicial
            FROM ssap_causas  c
            JOIN ssap_demandados d ON d.causaId = c.id
            JOIN ssap_fueros f ON f.id = c.fueroId
            JOIN ssap_depto_judicial dj ON dj.id = c.deptoJudicialId
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta' AND d.subsidiado = 0 AND c.fueroId = $fuero
            GROUP BY dj.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->deptoJudicial]->cantFProfNoSubs = $row->cantFProfNoSubs;
            $resultado[1000]->cantFProfNoSubs += $row->cantFProfNoSubs;
        }
        return $resultado;
    }

    function getSubsididosPorFuero($fechaDesde, $fechaHasta, $fuero) {
        $this->db->select('medicos.nombre nombre, demandados.matricula matricula, especialidades.nombre codEspecialidad, causas.fechaInicio fechaActoMedico, causas.fechaPrecentacion fechaPresentacion, caratulas.nombre caratula, (CASE ssap_demandados.seguroId WHEN 0 THEN "N" ELSE "S" END) as seguroPrivado');
        $this->db->from('causas');
        $this->db->join('demandados', 'demandados.causaId = causas.id');
        $this->db->join('medicos', 'medicos.matricula = demandados.matricula');
        $this->db->join('especialidades', 'demandados.especialidadId = especialidades.id');
        $this->db->join('caratulas', 'caratulas.causaId = causas.id');

        $this->db->where('causas.fechaInicio >= ', $fechaDesde);
        $this->db->where('causas.fechaInicio <= ', $fechaHasta);
        $this->db->where('caratulas.id in (
                                            SELECT max(ssap_caratulas.id) 
                                            FROM ssap_caratulas 
                                            JOIN ssap_causas c
                                            ON c.id = ssap_caratulas.causaId 
                                            WHERE ssap_causas.id = c.id
                                            )');
        $this->db->where('causas.fueroId', $fuero);
        $this->db->group_by('especialidades.id');


        $results = $this->db->get();
//echo $this->db->last_query();
        return $results->result_object();
    }

    function getCausasPorEstadoProcesal($deptoJudicialId, $fechaDesde, $fechaHasta, $fuero) {
        $query = $this->db->query("
            SELECT id, nombre
            FROM ssap_estados e
            WHERE e.fueroId = $fuero
            ORDER BY nombre
                ");

        $resultado = array();
        foreach ($query->result() as $row) {
            $resultado[$row->id]->estadoProcesal = $row->nombre;
            $resultado[$row->id]->cantFinalizadas = 0;
            $resultado[$row->id]->cantFavorables = 0;
            $resultado[$row->id]->cantDesfavorables = 0;
        }

        // Cantidad de causas finalizadas por Estado Procesal y Fuero
        $query = $this->db->query("
            SELECT count(c.id) cantFinalizadas, ce.estadoId estadoProcesal
            FROM ssap_causas c
            JOIN ssap_causas_x_estados ce ON ce.causaId = c.id
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta' AND c.fueroId = $fuero AND c.deptoJudicialId = $deptoJudicialId
            And ce.id in (
                SELECT max(ssap_causas_x_estados.id) 
                FROM ssap_causas_x_estados 
                JOIN ssap_causas
                ON ssap_causas.id = ssap_causas_x_estados.causaId 
                WHERE c.id = ssap_causas.id  )
            GROUP BY ce.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->estadoProcesal]->cantFinalizadas = $row->cantFinalizadas;
        }
        // Cantidad de causas finalizadas  Favorables por Estado Procesal y Fuero
        $query = $this->db->query("
            SELECT count(c.id) cantFavorables, ce.estadoId estadoProcesal
            FROM ssap_causas c 
            JOIN ssap_causas_x_estados ce ON ce.causaId = c.id
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta' AND c.fueroId = $fuero AND c.deptoJudicialId = $deptoJudicialId AND c.valoracion = 1 
            And ce.id in (
                SELECT max(ssap_causas_x_estados.id) 
                FROM ssap_causas_x_estados 
                JOIN ssap_causas
                ON ssap_causas.id = ssap_causas_x_estados.causaId 
                WHERE c.id = ssap_causas.id  )
            GROUP BY ce.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->estadoProcesal]->cantFavorables = $row->cantFavorables;
        }
        // Cantidad de causas finalizadas Desfavorables por Estado Procesal y Fuero
        $query = $this->db->query("
            SELECT count(c.id) cantDesfavorables, ce.estadoId estadoProcesal
            FROM ssap_causas  c           
            JOIN ssap_causas_x_estados ce ON ce.causaId = c.id
            WHERE c.finalizada is not NULL AND c.finalizada >= '$fechaDesde' AND c.finalizada <= '$fechaHasta' AND c.fueroId = $fuero AND c.deptoJudicialId = $deptoJudicialId AND c.valoracion = 2
            And ce.id in (
                SELECT max(ssap_causas_x_estados.id) 
                FROM ssap_causas_x_estados 
                JOIN ssap_causas
                ON ssap_causas.id = ssap_causas_x_estados.causaId 
                WHERE c.id = ssap_causas.id  )
            GROUP BY ce.id
                ");

        foreach ($query->result() as $row) {
            $resultado[$row->estadoProcesal]->cantDesfavorables = $row->cantDesfavorables;
        }

        return $resultado;
    }

    function getAbogadosDemandatesPorCausas() {
        // Cantidad de causas finalizadas por Estado Procesal y Fuero
        $query = $this->db->query("
            SELECT count(cad.abogadoDemandanteId) cantCausas, ad.*
            FROM ssap_causas_x_abogados_demandantes cad
            JOIN ssap_abogados_demandantes ad ON cad.abogadoDemandanteId = ad.id
            GROUP BY cad.abogadoDemandanteId
            LIMIT 0 , 20
                ");

        $deptosJudiciales = getListDeptosJudiciales();

        $resultado = array();

        $i = 0;
        foreach ($query->result() as $row) {
            $resultado[$i]->abogado = $row->apellido . ', ' . $row->nombre . ' (' . $row->tomo . ' - ' . $row->folio . ' ' . $deptosJudiciales[$row->deptoJudicial] . ')';
            $resultado[$i]->abogadoGrafico = $row->apellido . ' (' . $row->tomo . ' - ' . $row->folio . ')';
            $resultado[$i]->cantCausas = $row->cantCausas;
            $i++;
        }

        return $resultado;
    }

}

